先來安裝 Docker 一樣透過 APT 來安裝 docker --version 確認安裝
apt-get install -y docker.io
docker --version
在開始操作 Docker 前先來寫寫 dockerfile 這邊有一些注意事項
*1
*2
*1
: alpine 是一個非常小的 Linux distribution,如果沒有特別要求使用的 OS 可以選擇 alpine 來大幅減少 Image Size。*2
: docker 的 image 是透過一層一層堆疊來建立的,每一層對應的就是 dockerfile 寫的指令執行後的結果,若是這個結果是跟上一次 build 時是一樣的, docker 就不會重複建立同一層 image ,而是使用上一次 build 起來的 image 減少 build 的時間和儲存空間。
大致上要注意的地方是這些來開始寫 dockerfile 吧 比較常使用的指令有這幾個
FROM
: 指定 Base ImageENV
: 指定環境變數EXPOSE
: 指定要對外開放的 PortCOPY
: 從本機複製檔案進入 ImageRUN
: 在 Image 內執行指令CMD
: 設定 Image 啟動的預設指令
接著試著寫一個 linux 跑 apache2 的 dockerfile 試試看
FROM alpine:latest
EXPOSE 80
RUN apk add apache2
CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]
這樣子就寫好了接下來準備 build
docker 的操作基本是會有這些
docker pull
: 拉 Image 下來到 local 使用docker push
: 推 Image 到 Registry 存放docker build
: 建立 Imagedocker tag
: 改變 Image 的 Tagdocker images
: 顯示 Image 清單docker ps
: 顯示 docker 目前執行的 Containerdocker kill
: 關掉 Containerdocker rm
: 刪除 Docker 上的資源(Image/Container)
來 build 剛剛寫好的 dockerfile
root@LCR:~/docker# docker build -t test-apache:0 .
Sending build context to Docker daemon 2.048kB
Step 1/4 : FROM alpine:latest
---> 7e01a0d0a1dc
Step 2/4 : EXPOSE 80
---> Running in 56a2c5253220
Removing intermediate container 56a2c5253220
---> d50066a88255
Step 3/4 : RUN apk add apache2
---> Running in 6c2f0fd30854
fetch https://dl-cdn.alpinelinux.org/alpine/v3.18/main/x86_64/APKINDEX.tar.gz
fetch https://dl-cdn.alpinelinux.org/alpine/v3.18/community/x86_64/APKINDEX.tar.gz
(1/6) Installing libuuid (2.38.1-r8)
(2/6) Installing apr (1.7.4-r0)
(3/6) Installing libexpat (2.5.0-r1)
(4/6) Installing apr-util (1.6.3-r1)
(5/6) Installing pcre2 (10.42-r1)
(6/6) Installing apache2 (2.4.57-r3)
Executing apache2-2.4.57-r3.pre-install
Executing busybox-1.36.1-r2.trigger
OK: 11 MiB in 21 packages
Removing intermediate container 6c2f0fd30854
---> a9abe16a3176
Step 4/4 : CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]
---> Running in ee0e8c6758b2
Removing intermediate container ee0e8c6758b2
---> c84ed029757c
Successfully built c84ed029757c
Successfully tagged test-apache:0
root@LCR:~/docker#
出現成功後就可以確認 build 出來的 image 了
root@LCR:~/docker# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
test-apache 0 c84ed029757c 3 minutes ago 13.1MB
alpine latest 7e01a0d0a1dc 6 weeks ago 7.34MB
root@LCR:~/docker#
這邊的 alpine 是在 build test-apache 的時候做為 Base Image 使用
並不是自動產生在那邊的
最後來測試看看 Image 能不能正常運作
docker run -it -p 80:80 --name test test-apache:0
開另一個 Terminal 用 curl 敲
root@LCR:~/docker# curl localhost
<html><body><h1>It works!</h1></body></html>
root@LCR:~/docker#
確認能夠運作後就能 push 到 Registry 上了
這邊使用官方提供的 Image 建立 Registry 進行操作
docker run -d -p 5000:5000 --restart always --name registry registry:2
docker ps -a
docker tag test-apache:0 localhost:5000/test-apache:0
docker push localhost:5000/test-apache:0
等待跑條完成後就成功We dit it 成功了
但這個 Registry 之後可能會被搬去其他地方 :D